home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / PRG / NGL2.0.1J(ppc).sit / NGL2.0.1J(ppc) / Hide Snow Demo / Hide Data Snow(PPC).c < prev    next >
C/C++ Source or Header  |  1996-10-03  |  6KB  |  242 lines

  1. /*============================================================
  2.  
  3.                     Hide Data Snow(PPC)
  4.                     
  5. ============================================================*/
  6.  
  7. #include        "N_Library.h"
  8.  
  9. void            Main_Process(void);
  10. void            Key_Process(void);
  11.  
  12. short            Data_Rsrc = 0;
  13. long                routine_step = 0;
  14. long                wait;
  15. short            S1_X[1024];
  16. short            S1_Y[1024];
  17. unsigned short        S1_D[1024];
  18. short            S1_MX[1024];
  19. short            S1_MY[1024];
  20. short            r = 0,rs=0;
  21. short            speed  = -3;
  22. Boolean            q = false;
  23. Boolean            kb=false;
  24. EventRecord        theEvent;
  25. short            Snd_List0[]     = {1000,1001,0};                //使用するサウンドリソース番号の登録
  26.  
  27. void main(void)
  28. {
  29.     WindowPtr    window;
  30.     short         i;
  31.  
  32.     ToolboxInit();
  33.     ColorCheck();
  34.     HideMenuBar();
  35.     window = GetNewWindow (128,nil,(WindowPtr)-1L );
  36.     N_Window_Set(window,-(window->portBits.bounds.left),-(window->portBits.bounds.top),640,480);
  37.     N_Sp_Make(640,480);
  38.     N_Cel_Make2(640,480);
  39.  
  40. /*    PICTリソースから画像データを読み込み各種設定を行う場合の処理   */
  41. /*
  42.     Open_Resource_File(128,1,&Data_Rsrc);
  43. //    Set Kanban Sprites <Sprites & Cel> (Sprite 256)
  44.     Through_Col = 0xff;                                                //透明部分を黒に変更
  45.     N_Sprite_Set(200,256,216,88,0,1,1,0);                                //木の看板を登録 (Sp 256)
  46. //    Set Snow Sprites (Sprite 30-46)
  47.     N_Sprite_Set(404,30,32,32,0,1,1,2);                                //雪のパターンの登録 (Sp 30)
  48.     N_Sprite_Set(419,46,8,8,0,1,1,0);
  49.     Through_Col = 0x00;                                            //透明部分を白に変更
  50.     N_Sprite_Set(132,100,25,26,1,6,1,0);                                //Buttonの登録(Sp 100-105)
  51.     N_Sprite_Set(133,110,208,120,0,1,1,0);                            //PANELの登録(Sp 110)
  52.     N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                            //背景は、スプライトオフスクリーンに書いておく
  53. */
  54. /*    上記のスプライト・PICTの設定状態・データがすべてそのままファイルに保存できます。  */
  55. //    N_Sp_Save();                                                    //バッファ上のスプライトデータをダイアログを開きセーブ
  56. //    N_Pict_Save();                                                    //バッファ上のPICTデータをダイアログを開きセーブ
  57.  
  58. /*    スプライト・PICTの設定状態・データがそのまま復元されます。 */
  59.     N_Sp_Load("¥pSnow Sprites");                                        //スプライトデータをバッファに読み込む
  60.     N_Pict_Load("¥pSnow Graphics");                                    //PICTデータをバッファに読み込む
  61.     N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                            //背景は、スプライトオフスクリーンに書いておく
  62.     N_Sound_Load(&Snd_List0[0]);                                        //Buttonのオン・オフ時の音を読み込む
  63.  
  64. //    Button Set-up
  65.     N_Button_Set(0,0,1,10,404,512,0x80000000+100,0x80000000+101,1000,1001);    //Q Button
  66.     N_Button_Set(0,1,1,40,404,512,0x80000000+102,0x80000000+103,1000,1001);    //C Button
  67.     N_Button_Set(0,2,1,130,364,40,0x80000000+104,0x80000000+105,1000,1001);    //up Button
  68.     N_Button_Set(0,3,1,130,442,40,0x80000000+104,0x80000000+105,1000,1001);    //down Button
  69.     N_Button_Set(0,4,1,93,404,40,0x80000000+104,0x80000000+105,1000,1001);    //left Button
  70.     N_Button_Set(0,5,1,167,404,40,0x80000000+104,0x80000000+105,1000,1001);    //right Button
  71.  
  72. //    Close_Resource_File(&Data_Rsrc);
  73.  
  74.     routine_step = 0;
  75.     for (i = 0;i!=1024;i++)
  76.     {
  77.         N_Cel_Kill(i);                                                //プレーンを初期化
  78.         S1_X[i] = GetRandom(0,640*32)-640*16;                        //配列にランダムで雪の座標を入れておく
  79.         S1_Y[i] = GetRandom(0,480*32)-480*16;
  80.         S1_D[i] = GetRandom(1,255);                                    //奥行き(大きいほど奥になる)
  81.         S1_MX[i] = GetRandom(0,30)-15;
  82.         S1_MY[i] = GetRandom(0,30)-15;
  83.     }
  84.  
  85.     N_Pict_Effect (131,0,0,3,0,0);
  86.     for (i=0;i!=32;i++)
  87.     {
  88.         Delay(1,&wait);
  89.         N_Pict_Effect (131,0,0,3,1,0);
  90.         N_Pict_Effect (131,0,0,3,1,0);
  91.         N_Pict_Effect (131,0,0,3,1,0);
  92.         N_Pict_Effect (131,0,0,3,1,0);
  93.         N_Pict_Effect (131,0,0,3,1,0);
  94.         N_Pict_Effect (131,0,0,3,1,0);
  95.         N_Pict_Effect (131,0,0,3,1,0);
  96.         N_Pict_Effect (131,0,0,3,1,0);
  97.     }
  98.     N_Button_Put(0);
  99.  
  100.     do
  101.     {
  102.         Main_Process();
  103.     }
  104.     while (q==false);
  105.     N_Sound_Close();                                                //サウンドチャネルを閉じる
  106.     FlushEvents( everyEvent, 0 ); 
  107.     ShowMenuBar();
  108.     ColorRevert();
  109.  
  110. }
  111.  
  112. void Main_Process(void)
  113. {
  114.     short            i,x,y,ii,p = 0,dist,bt;
  115.     long                wrk;
  116.     long                xx,yy;
  117.     unsigned long        dum;
  118.     char                key;
  119.     Boolean            emp;
  120.     Point                mp;
  121.  
  122.     N_Cel_Put(1800,0x80000000+110,4,356);                            //PANEL
  123.     
  124.     Key_Process();
  125.     routine_step++;
  126.     
  127.     if (routine_step<64)
  128.     {
  129.         N_Cel_Put(1799,0x80000000+256,212,(short)(routine_step*4-92));
  130.     }
  131.     if (routine_step>=64 && routine_step<192)
  132.     {
  133.         N_Cel_Put(1799,0x80000000+256,212,164);
  134.     }        
  135.     if (routine_step>=192 && routine_step <300)
  136.     {
  137.         N_Cel_Put(1799,0x80000000+256,212,(short)164+((routine_step-192)*5));
  138.     }
  139.  
  140.     if (routine_step < 700) ii = routine_step;
  141.         else    ii = 700;
  142.  
  143.     for (i = 0;i!=ii;i++)
  144.     {
  145.         S1_X[i] += S1_MX[i]+GetRandom(0,10)-5;
  146.         if (S1_X[i]<-640*16)S1_X[i]=640*16;
  147.         if (S1_X[i]>640*16)S1_X[i]=-640*16;
  148.         S1_Y[i] += S1_MY[i]+GetRandom(0,10)-5;
  149.         if (S1_Y[i]<-640*16)S1_Y[i]=640*16;
  150.         if (S1_Y[i]>640*16)S1_Y[i]=-640*16;
  151.  
  152.         x = S1_X[i];
  153.         y = S1_Y[i];
  154.  
  155.         wrk = S1_D[i];
  156.         wrk = wrk / 16;
  157.         wrk = 16-wrk;
  158.  
  159.         if (wrk>14) wrk = 15;
  160.  
  161.         N_Cel_3D_Put(i,0x80000000+30+wrk,x,y,320,240,r,S1_D[i]);        //雪の表示
  162.         dist = S1_D[i] + speed;
  163.         if (dist <  0)                                                //雪が着地するパターンを書いて、新たに雪を作成
  164.         {
  165.             dist = 512+dist;
  166.             N_Cel_Get(i,&emp,&dum,&x,&y);
  167.             N_Sp_Put(0x80000000+46,x-4,y-4);                        //雪の着地パターンは背景に直接書いて重ねる
  168.             S1_X[i] = GetRandom(0,640*32)-640*16;                    //配列にランダムで雪の座標を入れておく
  169.             S1_Y[i] = GetRandom(0,480*32)-480*16;
  170.         }            
  171.  
  172.         if (dist > 255)                                                //雪が着地するパターンを書いて、新たに雪を作成
  173.         {
  174.             dist = dist -256;            
  175.             S1_X[i] = GetRandom(0,640*32)-640*16;                    //配列にランダムで雪の座標を入れておく
  176.             S1_Y[i] = GetRandom(0,480*32)-480*16;
  177.         }            
  178.         S1_D[i] = dist;
  179.     }
  180.     r=r+rs;
  181.     N_Cel_Loop2(0,0);                                                //セル表示のすべての処理をこれを呼ぶだけで完了する
  182.  
  183.     bt=N_Button_Check(0);
  184.  
  185.     if (bt==0) q=true;
  186.     if (bt==1) N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                    //背景を書き直す
  187.     if (bt==2)    speed--;
  188.     if (bt==3)    speed++;
  189.     if (bt==4)    rs--;
  190.     if (bt==5)    rs++;
  191. }
  192.  
  193. void Key_Process(void)
  194. {
  195.     char        ky;
  196.     
  197.     ky = N_Key_Get();
  198.     if (kb == false)
  199.     {
  200.         if ((ky & 0x01) !=0)
  201.         {
  202.             speed++;
  203.             N_Button_Push(0,3);
  204.             kb = true;
  205.         }    
  206.         if ((ky & 0x02) !=0)
  207.         {
  208.             rs--;
  209.             N_Button_Push(0,4);
  210.             kb = true;
  211.         }
  212.         if ((ky & 0x04) !=0)
  213.         {
  214.             rs++;
  215.             N_Button_Push(0,5);
  216.             kb = true;
  217.         }
  218.         if ((ky & 0x08) !=0)
  219.         {
  220.             speed--;
  221.             N_Button_Push(0,2);
  222.             kb = true;
  223.         }
  224.  
  225.         if ((ky & 0x40) !=0)
  226.         {
  227.             N_Pict_Draw(131,0,0,(GrafPtr)SP_off,true);                    //背景を書き直す
  228.             N_Button_Push(0,1);
  229.             kb = true;
  230.         }
  231.     }    
  232.  
  233.     if ((ky & 0x80) !=0)
  234.     {
  235.         N_Button_Push(0,0);
  236.          q = true;
  237.     }
  238.     if (ky==0) kb = 0;
  239. }
  240.  
  241.  
  242.